/**
 * 存储登录人(token)
 */

// 导入用户数据接口
import { userAccountLogin } from '@/api/user'

// 用户状态
export default {
  // 命名空间,避免定义变量名字冲突
  namespaced: true,
  // state定义写成函数,避免引用问题
  state: () => ({
    // 定义当前登录人的信息
    profile: {
      id: '',
      avatar: '',
      nickname: '',
      account: '',
      mobile: '',
      token: ''
    }
  }),

  // 修改state数据的方法
  mutations: {
    /**
     * @param{*}  state 当前模块数据, 获取当前模块所有数据
     * @param{*}  payload 传递修改的数据,当前调用者传递的数据
     */
    // 修改登录人数据
    setProfile (state, payload) {
      state.profile = payload
    },

    // 删除登录人信息--> 删除内存+本地(localStorage)
    delProfile (state) {
      // 登录信息为空
      state.profile = {}
    }
  },

  // 异步的方法
  actions: {
    // 获取后台当前登录人数据
    // payload => 用户名和密码 { account, password }
    // commit 调用上方的 mutations 中的方法
    // payload 调用者 调用 mutations 传入的数据(用户和密码)
    async getProfileAction ({ commit }, payload) {
      // payload 调用者 调用 mutations 传入的数据(用户和密码)
      const { result } = await userAccountLogin(payload)
      // console.log('登陆者新信息', result)
      commit('setProfile', result)
    },
    // 退出登录删除登录人相关信息（账号信息+购物车数据）
    logoutAction ({ commit }) {
      commit('delProfile')
      // { root: true } 站到上帝视角/根store位置(跨模块调用 模块的方法)
      commit('cart/setCartList', [], { root: true })
    }
  }
}
